package DP;

import java.util.ArrayList;
import java.util.List;

/**
 * 118.杨辉三角
 * 给定一个非负整数 numRows，生成「杨辉三角」的前 numRows 行。
 * 在「杨辉三角」中，每个数是它左上方和右上方的数的和。
 */
public class generate {
    public List<List<Integer>> generate(int numRows) {
        List<List<Integer>> res = new ArrayList<>();
        List<Integer> row = new ArrayList<>();
        if (numRows == 1) {
            row.add(1);
            res.add(row);
            return res;
        } else if (numRows == 2) {
            row.add(1);
            res.add(row);
            row.add(1);
            res.add(row);
            return res;
        }
        int dp[][] = new int[numRows][numRows];

        for (int i = 0; i < numRows; i++) {
            dp[i][0] = 1;
            dp[i][i] = 1;
        }
        for (int i = 1; i < numRows; i++) {
            for (int j = 1; j < numRows; j++) {
                dp[i][j] = dp[i - 1][j - 1] + dp[i - 1][j];
            }
        }
        for (int i = 0; i < numRows; i++) {
            List<Integer> temp = new ArrayList<>();
            for (int num : dp[i]) {
                if (num != 0) {
                    temp.add(num);
                }
            }
            res.add(temp);
        }
        return res;
    }
}
